﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace thinger.MTHControlLib
{
    public partial class PanelEX : Panel
    {
        public PanelEX()
        {
            InitializeComponent();

            //设置组件的样式 解决闪烁的问题，和背景问题
            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);//此设置确保控件的所有绘制都通过 WM_PAINT 消息处理。这有助于避免绘制不一致和闪烁问题，
            this.SetStyle(ControlStyles.DoubleBuffer, true);//双缓冲是一种减少或消除闪烁的技术，它通过在内存中绘制控件的副本，然后再一次性将其绘制到屏幕上，从而提高了绘制的平滑性。
            this.SetStyle(ControlStyles.ResizeRedraw, true);//当控件大小改变时，此设置确保控件会重绘其内容。这有助于避免在调整控件大小时出现绘制问题，如未更新的区域或闪烁。
            this.SetStyle(ControlStyles.Selectable,true);//此设置使控件可选择。对于某些控件（如自定义控件），可能需要明确设置此标志以启用选择功能。
            this.SetStyle(ControlStyles.SupportsTransparentBackColor, true); //此设置允许控件支持透明背景色。当控件的背景色设置为 Color.Transparent 时，它将显示其父容器的背景。
        
        }


        private float topGap = 1;
        [Browsable(true)]
        [Category("自定义属性")]
        [Description("上边间距")]
        public float TopGap
        {
            get { return topGap; }
            set { 
                topGap = value; 
                this.Invalidate();//请求重新绘制
            }
        }


        private float bottomGap=1f;
        [Browsable(true)]
        [Category("自定义属性")]
        [Description("下边间距")]
        public float BottomGap
        {
            get { return bottomGap; }
            set { 
                bottomGap = value;
                this.Invalidate();//请求重新绘制
            }
        }


        private float leftGap=1f;
        [Browsable(true)]
        [Category("自定义属性")]
        [Description("左边间距")]
        public float LeftGap
        {
            get { return leftGap; }
            set { 
                leftGap = value;
                this.Invalidate();//请求重新绘制
            }
        }

        private float rightGap = 1f;
        [Browsable(true)]
        [Category("自定义属性")]
        [Description("右边间距")]
        public float RightGap
        {
            get { return rightGap; }
            set { 
                rightGap = value;
                this.Invalidate();//请求重新绘制
            }
        }


        private float borderWidth = 1f;
        [Browsable(true)]
        [Category("自定属性")]
        [Description("边框宽度")]
        public float BorderWidth
        {
            get { return borderWidth; }
            set { 
                borderWidth = value;
                this.Invalidate();//请求重新绘制
            }
        }


        private Color borderColor = Color.FromArgb(25,255,254);
        [Browsable(true)]
        [Category("自定义属性")]
        [Description("边框颜色")]
        public Color BorderColor
        {
            get { return borderColor; }
            set { 
                borderColor = value;
                this.Invalidate();//请求重新绘制
            }
        }



        /// <summary>
        /// 马上执行的生命周期
        /// </summary>
        /// <param name="e"></param>
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            //设定画布
            Graphics graphics = e.Graphics;
            //设定画笔
            Pen pen = new Pen(borderColor, borderWidth);
            //设定宽
            float width = this.Width - leftGap - rightGap - borderWidth;
            //设定高
            float height = this.Height - topGap - bottomGap - borderWidth;
            //设定起始的横坐标
            float x = leftGap + borderWidth * 0.5f;
            //设定起始的纵坐标
            float y = topGap + borderWidth * 0.5f;
            //画出矩形
            graphics.DrawRectangle(pen, x,y,width,height);
        }
    }
}
